package com.tms.utils.token;

import com.tms.domain.User;
import io.jsonwebtoken.Claims;
import org.springframework.security.core.Authentication;

import javax.servlet.http.HttpServletRequest;

public interface TokenService {

    /**
     * 根据user对象指定token
     *
     * @param user
     * @return
     */
    String getToken(User user);

    /**
     * 取出token里的信息
     *
     * @param token
     * @return
     */
    Claims getClaims(String token);

    /**
     * 从request里取token,得到no后查找返回user
     *
     * @param request http请求
     * @return user对象
     */
    User getUserByRequest(HttpServletRequest request);

    /**
     * 直接通过request取出对应的workcellId
     *
     * @param request
     * @return
     */
    int getWorkcellId(HttpServletRequest request);

    /**
     * 直接通过request取出对应的position
     *
     * @param request
     * @return
     */
    String getPosition(HttpServletRequest request);

    /**
     * 判断token是否过期
     *
     * @param token token
     * @return 过期返回false
     */
    boolean isExpiration(String token);

    /**
     * 根据user对象指定token
     *
     * @param authentication au
     * @return
     */
    String getTokenFromAuthentication(Authentication authentication);

    /**
     * 根据原有token进行刷新
     *
     * @param token
     * @return
     */
    String refresh(String token);

    /**
     * 从token里取得信息找到user
     *
     * @param token
     * @return
     */
    User getUserByToken(String token);

    /**
     * 取得workcellId
     *
     * @param token
     * @return
     */
    int getWorkcellId(String token);
}
